/**
 * API工具函数
 * 用于与后端服务器进行数据交互
 */

// 环境配置 - 可以根据需要切换不同环境的后端服务
const ENV = {
  // 开发环境 - 本地或局域网内的后端服务
  development: {
    API_BASE_URL: 'http://localhost:5000/api',  // 本地开发环境
    // API_BASE_URL: 'http://192.168.1.100:5000/api',  // 局域网内其他电脑
  },
  // 生产环境 - 公网服务器
  production: {
    API_BASE_URL: 'http://192.168.1.3:5000/api',  // 当前正式环境
  }
};

// 选择使用的环境 - 开发环境或生产环境
const USE_ENV = 'development'; // 切换为'development'使用本地服务，切换为'production'使用正式环境

// 后端API基础URL
const API_BASE_URL = ENV[USE_ENV].API_BASE_URL;
console.log('当前使用环境:', USE_ENV);
console.log('API_BASE_URL:', API_BASE_URL);

/**
 * 发起GET请求
 * @param {string} url - 请求路径
 * @returns {Promise} - 返回Promise对象
 */
function requestGet(url) {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${API_BASE_URL}${url}`,
      method: 'GET',
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(`请求失败: ${res.statusCode}`));
        }
      },
      fail: (err) => {
        console.error('网络请求失败:', err);
        // 如果是开发环境，可以返回模拟数据以便继续开发
        if (err.errMsg && err.errMsg.includes('url not in domain list')) {
          console.warn('提示：请在微信开发者工具中设置"不校验合法域名"选项，或在app.json中配置合法域名');
          // 返回模拟的轮播图数据，确保页面能正常显示
          resolve({
            success: true,
            data: [
              { id: 1, image_url: '/images/banner1.png', link: '', order: 1 },
              { id: 2, image_url: '/images/banner2.png', link: '', order: 2 },
              { id: 3, image_url: '/images/banner3.png', link: '', order: 3 }
            ]
          });
        } else {
          reject(new Error(`网络错误: ${err.errMsg}`));
        }
      }
    });
  });
}

/**
 * 获取轮播图列表
 * @returns {Promise} - 返回轮播图列表数据的Promise
 */
async function getBanners() {
  try {
    console.log('发起获取轮播图请求');
    const data = await requestGet('/banners');
    console.log('获取轮播图响应数据:', data);
    if (data.success) {
      // 提取基础URL的主机部分（不包含/api路径）
      const BASE_HOST = API_BASE_URL.replace('/api', '');
      
      // 将相对路径转换为完整的图片URL
      const bannersWithFullUrl = data.data.map(banner => ({
        ...banner,
        // 使用当前环境的基础URL构建完整图片URL
        image_url: banner.image_url.startsWith('http') ? banner.image_url : `${BASE_HOST}${banner.image_url}`
      }));
      console.log('处理后的轮播图数据:', bannersWithFullUrl);
      return bannersWithFullUrl;
    } else {
      throw new Error(data.message || '获取轮播图失败');
    }
  } catch (error) {
    console.error('获取轮播图失败:', error);
    throw error;
  }
}

/**
 * 获取文章列表
 * @param {number} page - 页码
 * @param {number} perPage - 每页数量
 * @returns {Promise} - 返回文章列表数据的Promise
 */
async function getArticles(page = 1, perPage = 5) {
  try {
    console.log('发起获取文章列表请求');
    const data = await requestGet(`/articles?page=${page}&per_page=${perPage}`);
    console.log('获取文章列表响应数据:', data);
    if (data.success) {
      // 提取基础URL的主机部分（不包含/api路径）
      const BASE_HOST = API_BASE_URL.replace('/api', '');
      
      // 将相对路径转换为完整的图片URL
      const articlesWithFullUrl = data.data.articles.map(article => ({
        ...article,
        // 使用当前环境的基础URL构建完整图片URL
        cover_image: article.cover_image && !article.cover_image.startsWith('http') ? `${BASE_HOST}${article.cover_image}` : article.cover_image
      }));
      console.log('处理后的文章列表数据:', articlesWithFullUrl);
      return {
        articles: articlesWithFullUrl,
        total: data.data.total,
        page: data.data.page,
        per_page: data.data.per_page,
        has_next: data.data.has_next
      };
    } else {
      throw new Error(data.message || '获取文章列表失败');
    }
  } catch (error) {
    console.error('获取文章列表失败:', error);
    throw error;
  }
}

/**
 * 获取文章详情
 * @param {string} articleId - 文章ID
 * @returns {Promise} - 返回文章详情数据的Promise
 */
async function getArticleDetail(articleId) {
  try {
    console.log('发起获取文章详情请求');
    const data = await requestGet(`/articles/${articleId}`);
    console.log('获取文章详情响应数据:', data);
    if (data.success) {
      // 提取基础URL的主机部分（不包含/api路径）
      const BASE_HOST = API_BASE_URL.replace('/api', '');
      
      // 将相对路径转换为完整的图片URL
      const articleWithFullUrl = {
        ...data.data,
        // 使用当前环境的基础URL构建完整图片URL
        cover_image: data.data.cover_image && !data.data.cover_image.startsWith('http') ? `${BASE_HOST}${data.data.cover_image}` : data.data.cover_image
      };
      console.log('处理后的文章详情数据:', articleWithFullUrl);
      return articleWithFullUrl;
    } else {
      throw new Error(data.message || '获取文章详情失败');
    }
  } catch (error) {
    console.error('获取文章详情失败:', error);
    throw error;
  }
}

module.exports = {
  getBanners,
  getArticles,
  getArticleDetail
};